package com.hengxinguotong.hxgtwygsp.ui.supervise;

import com.hengxinguotong.hxgtwygsp.ui.app.FragmentScoped;
import com.hengxinguotong.hxgtwygsp.ui.supervise.patrol.PatrolFragment;
import com.hengxinguotong.hxgtwygsp.ui.supervise.patrol.info.PatrolInfoContract;
import com.hengxinguotong.hxgtwygsp.ui.supervise.patrol.info.PatrolInfoFragment;
import com.hengxinguotong.hxgtwygsp.ui.supervise.patrol.info.PatrolInfoPresenter;
import com.hengxinguotong.hxgtwygsp.ui.supervise.patrol.issue.PatrolIssueContract;
import com.hengxinguotong.hxgtwygsp.ui.supervise.patrol.issue.PatrolIssueFragment;
import com.hengxinguotong.hxgtwygsp.ui.supervise.patrol.issue.PatrolIssuePresenter;
import com.hengxinguotong.hxgtwygsp.ui.supervise.patrol.statistics.PatrolStatisticsContract;
import com.hengxinguotong.hxgtwygsp.ui.supervise.patrol.statistics.PatrolStatisticsFragment;
import com.hengxinguotong.hxgtwygsp.ui.supervise.patrol.statistics.PatrolStatisticsPresenter;
import com.hengxinguotong.hxgtwygsp.ui.supervise.satisfaction.SatisfactionContract;
import com.hengxinguotong.hxgtwygsp.ui.supervise.satisfaction.SatisfactionFragment;
import com.hengxinguotong.hxgtwygsp.ui.supervise.satisfaction.SatisfactionPresenter;
import com.hengxinguotong.hxgtwygsp.ui.supervise.suggestion.SuggestionContract;
import com.hengxinguotong.hxgtwygsp.ui.supervise.suggestion.SuggestionFragment;
import com.hengxinguotong.hxgtwygsp.ui.supervise.suggestion.SuggestionPresenter;
import com.hengxinguotong.hxgtwygsp.ui.supervise.warning.WarningFragment;
import com.hengxinguotong.hxgtwygsp.ui.supervise.warning.manager.WarningManagerContract;
import com.hengxinguotong.hxgtwygsp.ui.supervise.warning.manager.WarningManagerFragment;
import com.hengxinguotong.hxgtwygsp.ui.supervise.warning.manager.WarningManagerPresenter;
import com.hengxinguotong.hxgtwygsp.ui.supervise.warning.property.WarningPropertyContract;
import com.hengxinguotong.hxgtwygsp.ui.supervise.warning.property.WarningPropertyFragment;
import com.hengxinguotong.hxgtwygsp.ui.supervise.warning.property.WarningPropertyPresenter;

import dagger.Binds;
import dagger.Module;
import dagger.android.ContributesAndroidInjector;

/**
 * TODO
 *
 * @author hjz
 * @version V1.0.0
 * @since 2019/4/2 14:37
 */

@Module
public abstract class SuperviseModule
{
    @ContributesAndroidInjector
    @FragmentScoped
    abstract PatrolFragment bindsPatrolFragment();

    @ContributesAndroidInjector
    @FragmentScoped
    abstract PatrolIssueFragment bindsPatrolIssueFragment();

    @Binds
    @FragmentScoped
    abstract PatrolIssueContract.IPresenter bindsPatrolIssuePresenter(PatrolIssuePresenter patrolIssuePresenter);

    @ContributesAndroidInjector
    @FragmentScoped
    abstract PatrolStatisticsFragment bindsPatrolStatisticsFragment();

    @Binds
    @FragmentScoped
    abstract PatrolStatisticsContract.IPresenter bindsPatrolStatisticsPresenter(PatrolStatisticsPresenter patrolStatisticsPresenter);

    @ContributesAndroidInjector
    @FragmentScoped
    abstract PatrolInfoFragment bindsPatrolInfoFragment();

    @Binds
    @FragmentScoped
    abstract PatrolInfoContract.IPresenter bindsPatrolInfoPresenter(PatrolInfoPresenter patrolInfoPresenter);

    @ContributesAndroidInjector
    @FragmentScoped
    abstract SuggestionFragment bindsSuggestionFragment();

    @Binds
    @FragmentScoped
    abstract SuggestionContract.IPresenter bindsSuggestionPresenter(SuggestionPresenter suggestionPresenter);

    @ContributesAndroidInjector
    @FragmentScoped
    abstract SatisfactionFragment bindsSatisfactionFragment();

    @Binds
    @FragmentScoped
    abstract SatisfactionContract.IPresenter bindsSatisfactionPresenter(SatisfactionPresenter satisfactionPresenter);

    @ContributesAndroidInjector
    @FragmentScoped
    abstract WarningFragment bindsWarningFragment();

    @ContributesAndroidInjector
    @FragmentScoped
    abstract WarningPropertyFragment bindsWarningPropertyFragment();

    @Binds
    @FragmentScoped
    abstract WarningPropertyContract.IPresenter bindsWarningPropertyPresenter(WarningPropertyPresenter warningPropertyPresenter);

    @ContributesAndroidInjector
    @FragmentScoped
    abstract WarningManagerFragment bindsWarningManagerFragment();

    @Binds
    @FragmentScoped
    abstract WarningManagerContract.IPresenter bindsWarningManagerPresenter(WarningManagerPresenter warningManagerPresenter);
}
